/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
<<<<<<< HEAD
 copyright: (C) 华友高科
=======
 copyright: (C) 华友高新
>>>>>>> origin/master
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) hualei 2017.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file x.h
 *  功能:
 *
 *                                                                         *
 ***************************************************************************/
#ifndef CHECKBATTERYINSTRUCTIONLOGIC_H
#define CHECKBATTERYINSTRUCTIONLOGIC_H
#include "checkbatteryinstruction.h"
#include "programset.h"
#include "instructionEnum.h"
#include "robotio.h"
#include <QObject>
#include "GeneralDefine.h"
#include "messagelog.h"

class ProgramEngine;
/**
 * @brief The LabelInstructionLogic class  指令逻辑处理类
 */
class CheckBatteryInstructionLogic:public QObject
{
    Q_OBJECT
public:

    /**
     * @brief The E_ERROR_CODE_DISCRBE enum     　　电池电量处理错误代码
     * @member    E_ERROR_GETBATTERYINFO_FAILD     电池组信息获取失败
     * @member
     */
    enum E_ERROR_CODE_DISCRBE
    {
        E_ERROR_GETBATTERYINFO_FAILD=12000
    };
    /**
     * @brief ChargingInstructionLogic              充电指令实现类构造函数
     * @param robotIdIn                             机器编号
     * @param programSetIn                          程序集合
     * @param programEngineIn                       程序解释引擎
     */
    CheckBatteryInstructionLogic(int robotIdIn,ProgramSet* programSetIn,RobotIo* ioControllerIn,ProgramEngine* programEngineIn);

public:
    /**
     * @brief startLabel           　获取check battery指令后的操作
     * @param programNum            正在运行的program的Number
     * @return                      返回１表示运行到了最后一行
     */
    E_PROGRAM_LOOP_RESULT startCheckBatteryLevel(int programNumIn, const CheckBatteryInstruction &instructionIn, int lineIndex);
//    E_PROGRAM_LOOP_RESULT startJump(int programNum,int jumpNum);
private:
    /**
     * @brief batteryInformation        电池组状态信息
     */
    struct BatteryInformation batteryInformation;

    /**
     * @brief addMsg  , 添加消息反馈
     * @param messageLevel
     * @param componentName
     * @param messageType
     * @param messageCode
     * @param robotId
     * @param parameter1
     * @param parameter2
     * @param parameter3
     * @param parameter4
     */
    void addMsg( int messageLevel,
                 std::string componentName,
                 std::string messageType,
                 int messageCode,
                 int robotId,
                 int parameter1 = 0,
                 int parameter2 = 0,
                 int parameter3 = 0,
                 int parameter4 = 0,
                 QString message= "");

private:
    int robotId;
    ProgramSet* programSet;
    RobotIo* ioController;
    ProgramEngine* programEngine;
};

#endif // LABELINSTRUCTIONLOGIC_H
